Load library

Load the necessary packages.

library(Seurat)
library(magrittr)
library(patchwork)

Set the WD and sample names, load the Seurat object

# Set directory and sample names
### Sample ID
sample <- params$sample_name
dir_in <- paste0("/gpfs/gibbs/pi/fan/sb2723/GBM_story/RNA/03.gen4_rds_20240916/", sample, "/")
list.files(dir_in) # Should show *_gen4_01_original_on_tissue.rds and *_gen4_02_noMT_on_tissue.rds
## [1] "R1110C_gen4_01_original_on_tissue.rds"
## [2] "R1110C_gen4_01_original.rds"          
## [3] "R1110C_gen4_02_noMT_on_tissue.rds"    
## [4] "R1110C_gen4_02_noMT.rds"
dir_out <- paste0("/gpfs/gibbs/pi/fan/sb2723/GBM_story/RNA/04.rds_gen4_normalized_20240916/", sample, "/")
if (!dir.exists(dir_out)) {dir.create(dir_out, recursive = TRUE)}

Load the Seurat objects to be normalized

First load the original one without MT gene filtering

samp_zUMIs_ontissue <- readRDS(paste0(dir_in, sample, '_gen4_01_original_on_tissue.rds'))

Standard log normalization and PCA process for samples

## NormalizeData() default is log normalization
samp_zUMIs_ontissue <- NormalizeData(object = samp_zUMIs_ontissue, normalization.method = "LogNormalize")

## Default parameters for find clusters and PCA reduction
samp_zUMIs_ontissue <- FindVariableFeatures(object = samp_zUMIs_ontissue)
samp_zUMIs_ontissue <- ScaleData(object = samp_zUMIs_ontissue)
samp_zUMIs_ontissue <- RunPCA(object = samp_zUMIs_ontissue)
samp_zUMIs_ontissue <- FindNeighbors(object = samp_zUMIs_ontissue, dims = 1:30)
samp_zUMIs_ontissue <- FindClusters(object = samp_zUMIs_ontissue)
## Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck
## 
## Number of nodes: 2170
## Number of edges: 112789
## 
## Running Louvain algorithm...
## Maximum modularity in 10 random starts: 0.6353
## Number of communities: 5
## Elapsed time: 0 seconds
samp_zUMIs_ontissue <- RunUMAP(object = samp_zUMIs_ontissue, dims = 1:30)

DefaultAssay(samp_zUMIs_ontissue) <- "Spatial"
p1 <- DimPlot(object = samp_zUMIs_ontissue, reduction = "umap")
p2 <- SpatialDimPlot(object = samp_zUMIs_ontissue, pt.size.factor = 2, image.alpha = 1)

png(filename=paste0(dir_out, sample, '_original_log_res0.8.png'), width = 8,height = 4,units = 'in',res=300)
plotA <- p1 | p2
plotA + plot_annotation(
  title = paste0(sample, '_original: log normalization res0.8'),
)
dev.off()
## png 
##   2
knitr::include_graphics(paste0(dir_out, sample, '_original_log_res0.8.png'))

## Save the RDS file for future check
saveRDS(samp_zUMIs_ontissue, file = paste0(dir_out, sample, '_gen4_03_original_on_tissue_log_res0.8.rds'))

SCT normalization and PCA process for samples

## Default parameters for find clusters and PCA reduction
samp_zUMIs_ontissue <- SCTransform(samp_zUMIs_ontissue, assay = "Spatial") %>%
  RunPCA() %>%
  FindNeighbors(dims = 1:30) %>%
  FindClusters(resolution = 0.8) %>% ## FindClusters() default res=0.8
  RunUMAP(dims = 1:30)
## Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck
## 
## Number of nodes: 2170
## Number of edges: 99516
## 
## Running Louvain algorithm...
## Maximum modularity in 10 random starts: 0.6779
## Number of communities: 8
## Elapsed time: 0 seconds
DefaultAssay(samp_zUMIs_ontissue) <- "SCT"
p3 <- DimPlot(object = samp_zUMIs_ontissue, reduction = "umap")
p4 <- SpatialDimPlot(object = samp_zUMIs_ontissue, pt.size.factor = 2, image.alpha = 1)

png(filename=paste0(dir_out, sample, '_original_SCT_res0.8.png'), width = 8,height = 4,units = 'in',res=300)
plotB <- p3 | p4
plotB + plot_annotation(
  title = paste0(sample, '_original: SCTransform res0.8'),
)
dev.off()
## png 
##   2
knitr::include_graphics(paste0(dir_out, sample, '_original_SCT_res0.8.png'))

saveRDS(samp_zUMIs_ontissue, file = paste0(dir_out, sample, '_gen4_03_original_on_tissue_SCT_res0.8.rds'))

Same nomalization and PCA process for noMT samples

Load the Seurat object without mitochondrial genes starting with MT|AL|H3|EEF|RPS|RPL|FP|AC|ENSM|ENSG|RNA|RN5|RN7|RNU|RNV

samp_zUMIs_filtered_ontissue <- readRDS(paste0(dir_in, sample, '_gen4_02_noMT_on_tissue.rds'))

Standard log normalization and PCA process for samples

## NormalizeData() default is log normalization
samp_zUMIs_filtered_ontissue <- NormalizeData(object = samp_zUMIs_filtered_ontissue, normalization.method = "LogNormalize")

samp_zUMIs_filtered_ontissue <- FindVariableFeatures(object = samp_zUMIs_filtered_ontissue)
samp_zUMIs_filtered_ontissue <- ScaleData(object = samp_zUMIs_filtered_ontissue)
samp_zUMIs_filtered_ontissue <- RunPCA(object = samp_zUMIs_filtered_ontissue)
samp_zUMIs_filtered_ontissue <- FindNeighbors(object = samp_zUMIs_filtered_ontissue, dims = 1:30)
samp_zUMIs_filtered_ontissue <- FindClusters(object = samp_zUMIs_filtered_ontissue)
## Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck
## 
## Number of nodes: 2170
## Number of edges: 114210
## 
## Running Louvain algorithm...
## Maximum modularity in 10 random starts: 0.6215
## Number of communities: 7
## Elapsed time: 0 seconds
samp_zUMIs_filtered_ontissue <- RunUMAP(object = samp_zUMIs_filtered_ontissue, dims = 1:30)

DefaultAssay(samp_zUMIs_filtered_ontissue) <- "Spatial"
p5 <- DimPlot(object = samp_zUMIs_filtered_ontissue, reduction = "umap")
p6 <- SpatialDimPlot(object = samp_zUMIs_filtered_ontissue, pt.size.factor = 2, image.alpha = 1)

png(filename=paste0(dir_out, sample, '_noMT_log_res0.8.png'), width = 8,height = 4,units = 'in',res=300)
plotC <- p5 | p6
plotC + plot_annotation(
  title = paste0(sample, '_noMT: log normalization res0.8'),
)
dev.off()
## png 
##   2
knitr::include_graphics(paste0(dir_out, sample, '_noMT_log_res0.8.png'))

saveRDS(samp_zUMIs_filtered_ontissue, file = paste0(dir_out, sample, '_gen4_04_noMT_on_tissue_log_res0.8.rds'))
samp_zUMIs_filtered_ontissue <- SCTransform(samp_zUMIs_filtered_ontissue, assay = "Spatial") %>%
  RunPCA() %>%
  FindNeighbors(dims = 1:30) %>%
  FindClusters(resolution = 0.8) %>% ## FindClusters() default res=0.8
  RunUMAP(dims = 1:30)
## Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck
## 
## Number of nodes: 2170
## Number of edges: 105107
## 
## Running Louvain algorithm...
## Maximum modularity in 10 random starts: 0.6709
## Number of communities: 7
## Elapsed time: 0 seconds
DefaultAssay(samp_zUMIs_filtered_ontissue) <- "SCT"
p7 <- DimPlot(object = samp_zUMIs_filtered_ontissue, reduction = "umap")
p8 <- SpatialDimPlot(object = samp_zUMIs_filtered_ontissue, pt.size.factor = 2, image.alpha = 1)

png(filename=paste0(dir_out, sample, '_noMT_SCT_res0.8.png'), width = 8,height = 4,units = 'in',res=300)
plotC <- p7 | p8
plotC + plot_annotation(
  title = paste0(sample, '_noMT: SCTransform res0.8'),
)
dev.off()
## png 
##   2
knitr::include_graphics(paste0(dir_out, sample, '_noMT_SCT_res0.8.png'))

saveRDS(samp_zUMIs_filtered_ontissue, file = paste0(dir_out, sample, '_gen4_04_noMT_on_tissue_SCT_res0.8.rds'))